4
תגובות

הדגל FILTER_FORCE_ARRAY

פתח OrelBeY ,
לא הבנתי מה השימוש פה ב-FILTER_FORCE_ARRAY. אפשר בבקשה הסבר?

4 תשובות

avatar ענה intval ב 14 לדצמבר 2012 #

filter constants

FILTER_FORCE_ARRAY
Always returns an array.

גורם לזה שתמיד התוצאה אחרי הפילטר תהיה מערך:

$bla = 789;
var_dump(filter_var($bla, FILTER_VALIDATE_INT, FILTER_FORCE_ARRAY));

array(1) {
  [0] =>
  int(789)
}


המטרה היא שאם אתה מריץ את הפילטר על סט נתונים מהמשתמש ואתה מצפה שהמשתמש הזין מערך
אז ככה תוכל לוודא שגם אחרי הפילטור תקבל מערך ולא ערך יחיד של null/false/ערך אחד שהמשתמש הזין.
וזה תכף לא רק להזנה של משתמש, אלה לכל דבר שאתה מצפה שיחזיר לך מערך ואתה רוצה לעשות לו פילטרציה.
במקום להוסיף בדיקות נוספות על הערך המוחזר מהפילטרציה תוכל ישר לדעת שאתה מקבל מערך ולא משהו יחידני.

avatar ענה OrelBeY ב 14 לדצמבר 2012 #

אבל זה חוזר בתור מערך גם ככה, לא? כתוב שם:
"...Return Values: An array"

avatar ענה intval ב 14 לדצמבר 2012 #

זה בגלל שאתה גם ככה מעביר לה מערך בתור פרמטר.
אם

$result = filter_var_array(...);

הדגל הזה לא מדבר על התוצאה הישירה של הפונקציה, הוא לא דואג לזה ש result$ ישירות תהיה מערך.
בגלל ש result תמיד יהיה מערך.
הדגל דואג לערכים שבתוך result$.

שים לב למשל בדוגמה שלהם הם מפעילים את הפונקציה על מערך כזה:
$data = array(
    'versions'      => '2.0.33',
    'testscalar'    => array('2', '23', '10', '12'),
);


התוצאה היא
array(2) {

  ["versions"]=>  string(6) "2.0.33"
  ["testarray"]=>  array(1) {
    [0]=>
    int(2)
  }
}


שים לב, version כאן היא מחרוזת.
לאומת זאת אם תשתמש בדגל של force_array - תקבל את versions בתור מערך וגם את כל שאר הערכים שבתוך result
תקבל בתור מערכים.

ככה שהדגל הזה מטפל בערכים שבתוך $result ולא בעובדה ש result עצמו יהיה מערך.

avatar ענה OrelBeY ב 14 לדצמבר 2012 #

אה, תודה רבה! :-)